TerraformレジストリでPre-written Sentinel policy Set for AWSが公開されました

TerraformレジストリでPre-written Sentinel policy Set for AWSが公開されました

Clock Icon2024.12.06

Pre-written Sentinel policy Set for AWSが発表されました。

https://www.hashicorp.com/blog/simplify-policy-adoption-in-terraform-with-pre-written-sentinel-policies-for-aws

Sentinelとは

Sentinelは、HashiCorpが開発したポリシー実行フレームワークです。主にインフラストラクチャの自動化における、ガバナンスとコンプライアンスの実施を目的としています。

Terraformで使う場合は、SentinelはPlan結果に対してポリシーチェックを行います。

Plan結果のため、コードが実行された状態です。静的解析よりも踏み込んだチェックが可能です。

ポリシーの例)

  • 「ManagedBy = terraform」タグがついているか
  • デプロイが金曜日に行われていないか

https://developer.hashicorp.com/sentinel/docs/terraform

Pre-written Sentinel policy Set for AWSとは

AWSとHashiCorpが共同開発している、Sentinel Policy Setです。(2024/12時点ではパブリックベータ)

Terraformレジストリで公開されています。

「Pre-written Sentinel Policies」がPrefixについているものです。

TerraformのModuleやProviderと同様にSentinelポリシーもTerraformレジストリで公開することができます。

「Pre-written Sentinel Policies」は管理主体がAWSとHashiCorpである点が特徴と言えます。

Sentinelは強力なツールですが、ポリシーを書くには学習コストが必要です。

ユーザーが独自にポリシーを書かなくても、Pre-written Sentinel policy Set for AWSを使うことでガバナンスを効かせることができる点が嬉しいです。

ポリシーの内容

CISに準拠したポリシーが提供されています。

Security HubのCISのセキュリティ基準相当のポリシーと思っていただければよいかと思います。

現時点で対応しているサービスは以下です。

  • EC2
  • KMS
  • Cloudtrail
  • S3
  • IAM
  • VPC
  • RDS
  • EFS

ポリシーの例としては、以下です。

  • VPCフローログが有効になっているか
  • S3バケットのブロックパブリックアクセスが有効になっているか
  • IAMパスワードの有効期限は90日以内か

ポリシーの内容は各Policy libraryやGitHub上で確認できます。

やってみた

HCP TerraformでPre-written Sentinel policy Set for AWSを使って、Policy Setを作成し、Workspaceに適用してみます。

VPCに対して、ポリシーを適用しました。

HCP Terraformの設定もTerraformで行いました。

├── policy
│   └── sentinel.hcl
└── terraform
    ├── aws # VPC
    │   ├── terraform.lock.hcl
    │   └── main.tf
    └── tfe # HCP Terraform(Workspace,Policy Set)
        ├── main.tf
        ├── terraform.lock.hcl
        ├── terraform.tfvars
        └── variables.tf

実運用ではPolicyとTerraformコードでリポジトリを分けることも多いと思いますが、今回は単一リポジトリで行いました。

事前準備

事前に以下を準備した上で、試してみました。

  • HCP TerraformのOrganizations作成
  • 作成するWorkspaceの対象Projectは作成
  • ProjectにVariables SetでAWS認証情報をセット

Policy用のファイルを用意する

まずはPolicy用のファイルを用意します。

今回はVPCのPre-written Sentinel policy Setを利用しました。

https://github.com/msato0731/terraform-sample/blob/main/pre-written-policy/policy/sentinel.hcl

Policyの使い方は簡単です。

Terraform RegistryのPolicy LibrariesでPolicyを探します。

「Pre-written」等のワードでPolicyを絞り込みます。今回使いたいVPCのPolicyが見つかりました。

Notification_Center.png

Policyを選択して、詳細に移動します。

Policyを選択すると、スニペットが表示されます。

コピーして、Sentinel用のファイルに貼ります。

これで、ポリシー用のファイルの用意は完了です。

Notification_Center.png

WorkspaceとPolicy SetをHCP Terraformにデプロイ

HCP Terraformにリソースを作成していきます。

terraform/tfeディレクトリに移動します。

terraform.tfvarsを用意します。

cd terraform/tfe
cp terarform.tfvars.sample terraform.tfvars
vi terraform.tfvars # 環境に合わせた値に置き換え

以下は、WorkspaceとPolicy Setを作成するTerraformコードです。

VCS DrivenのWorkspaceを作成します。

Workspaceはawsディレクトリ配下のコードに対して、Terraformを実行します。

https://github.com/msato0731/terraform-sample/blob/main/pre-written-policy/terraform/tfe/main.tf

Terraformを実行して、リソースを作成します。

terraform plan
terraform apply

動作確認

VPCのPolicyでは、VPC Flow logが設定されていないと検知されます。

以下のようにVPC Flow Log無しで、AWSリソースを定義しました。

https://github.com/msato0731/terraform-sample/blob/main/pre-written-policy/terraform/aws/main.tf

HCP Terraformで確認してみると、Policyで検知されていることが分かりました。

Notification_Center.png

Notification_Center.png

メッセージ通りVPC Flow Logを有効化して、再度Runしました。(コード中の「VPC Flow Log関連設定」以降のコメントアウトを解除)

run-Vqtuov86pksqVR6N___Runs___pre-written-policy-test-vpc___classmethod-sandbox___HCP_Terraform-1.png

ステータスがPassになることを確認できました。

おわりに

ポリシー実行フレームワークにSentinelかOPAどちらを使うか迷うケースが多いと思います。

「Pre-written Sentinel policy Set for AWS」の存在はSentinelを選定する理由の一つになると思います。

対応するPolicyの数が増えていくのが楽しみですね。

個人的には、FSBPベースのPre-witten Sentinel Policyもあったら嬉しいなと思いました。

以上、AWS事業本部の佐藤(@chari7311)でした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.